Table des matières
4.2. Quelques notions de cryptographie
En sécurité informatique, trois objectifs sont en général poursuivis : La confidentialité, l’intégrité et la disponibilité.
L’authentification des parties prenantes et le chiffrement des données seront nécessaires pour assurer ces objectifs de sécurité. Nous allons détailler ces deux processus, puis explorer des mécanismes cryptographiques permettant de les implémenter [1, 2].
4.2.1. Authentification
La sécurisation de l’accès à des ressources informatiques est un enjeu important pour garantir la protection des données, des services et des appareils. Cette sécurisation nécessite trois étapes [3, 4] :
- L’identification : permet de vérifier l’identité d’une personne ou d’un objet (“qui” il est ). En général, on demande à l’utilisateur d’indiquer son nom réel ou son nom d’utilisateur.
- L’authentification : cette étape permet de garantir qu’une personne ou un processus a un droit légitime à accéder à la ressource. Cela peut par exemple s’effectuer en comparant le mot de passe donné à celui stocké en base de données.
- L’autorisation ou le contrôle d’accès : définit quelles permissions sont données lors de l’accès aux ressources (lecture, modification, … ).
L’identification et l’authentification sont intimement liées. Identifier une personne sans vérification au moyen de l’authentification n’aurait aucun sens. De même, il n’est pas possible d’authentifier quelqu’un dont on ne connait pas l’identité.
L’autorisation peut s’effectuer sans contrôle d’identité si par exemple elle est universelle (par ex. un accès en lecture à une ressource accordée à tout le monde). Mais dans le cas où le niveau d’autorisation dépend de l’identité de l’utilisateur et de l’objet, identification et authentification sont nécessaires.
L’authentification est une étape clé pour garantir un niveau de sécurité donné : la technique choisie influencera sur le niveau de confiance qu’on peut accorder au processus. On identifie trois facteurs pouvant être utilisés dans le processus d’authentification :
- Ce que l’on connaît ou sait faire : un mot de passe, un numéro d’identification personnel, une signature, un geste,…
- Ce que l’on possède : une carte d’identité, une carte à puce, un smartphone, …
- Ce que l’on est : une photo, des empreintes digitales, …
Il existe trois types de protocoles d’authentification :
- L’authentification simple, comme l’utilisation d’un mot de passe ou d’une empreinte digitale.
- L’authentification forte, reposant sur deux facteurs ou plus (Multi-Factor Authentication, ou MFA)
- L’authentification unique (Single Sign-On ou SSO), qui permet à un utilisateur de s’authentifier une fois pour accéder à plusieurs applications.
Parmi toutes ces techniques, une des plus répandue à l’heure actuelle est encore l’utilisation des mots de passe. C’est une technique dont la sécurité dépend de plusieurs facteurs dont la force du mot de passe et la capacité de son propriétaire à en garantir la confidentialité, lors du stockage et lors du transfert (chiffrement).
La force, ou robustesse d’un mot de passe dépend de plusieurs paramètres [5,6] :
- Sa longueur : mieux vaut un mot de passe long (min. 13 à 16 caractères) et simple à retenir qu’un mot de passe complexe mais court, afin de se prémunir contre les attaques brute-force.
- Sa non-trivialité : il faut proscrire les mots de passe trop simples, issus du dictionnaire ou facilement déductible via des informations concernant la personne.
- Son unicité : un mot de passe ne doit pas être utilisé pour des services différents, afin que la fuite éventuelle du mot de passe ait un impact limité.
- Le nombre de caractères différents utilisés, pour augmenter la difficulté des attaques brute-force.
Pour renforcer l’utilisation des mots de passe, l’utilisation de gestionnaires de mots de passe et/ou la combinaison de plusieurs facteurs (MFA) sont des bonnes pratiques.
Un des problèmes rencontrés avec les mots de passe est qu’il faut stocker, sur le système d’authentification, une copie du mot de passe possédé par l’utilisateur. A l’origine, cela s’effectuait en clair, ce qui implique que toute fuite de données sur un système avec authentification amène la diffusion des mots de passe des utilisateurs.
Pour éviter cela, en pratique, on ne va pas stocker le mot de passe lui-même, mais uniquement le résultat de l’application multiple d’une fonction de hachage sur le mot de passe, qu’on appellera souvent valeur de hachage ou “hash”, ou encore empreinte. La fonction de hachage est choisie de telle sorte qu’il n’est pas possible (ou très difficile) à un attaquant de retrouver le mot de passe au départ de la valeur de hachage obtenue.
Pour authentifier l’utilisateur, on ne lui demandera pas d’envoyer son mot de passe, mais plutôt la valeur de hachage de ce dernier, qui sera alors comparée à celle stockée dans le système d’authentification.
La cryptographie permettra d’introduire une autre méthode d’authentification : les clés asymétriques. Contrairement aux mots de passe, ce système permet de ne pas divulguer le secret permettant l’authentification. Il se base sur un système de “challenge” pour valider le droit d’accès à la ressource. Nous expliquerons ce système dans le cadre du protocole SSH.
4.2.2. Chiffrement
L’authentification est indispensable pour s’assurer qu’une ressource n’est accessible que par les personnes autorisées, mais elle n’est pas suffisante : si les données échangées passent “en clair” sur un medium de stockage ou de communication, des personnes non autorisées pourront y avoir accès. Il faut donc s’assurer que, lors d’un transfert, seules les parties prenantes peuvent “voir” les données échangées. Cela peut s’effectuer avec du chiffrement, qui est un procédé permettant de rendre impossible la compréhension d’un document à quelqu’un qui n’en possède pas la clé de (dé-)chiffrement.
Le chiffrement s’effectue via des procédés cryptographiques. La fiabilité du processus de chiffrement dépendra en général de la complexité de la clé de chiffrement : il faudra donc s’assurer d’utiliser des clés de complexité suffisante pour garantir le niveau de confidentialité souhaité.
4.2.3. Types d’algorithmes
A l’origine de la cryptographie, les techniques utilisées se basaient sur des algorithmes relativement simples, n’utilisant pas nécessairement de “clé”. Il s’agissait en général de remplacement de caractères par d’autres, comme le Chiffre de César, dont le principe consiste à se décaler de trois lettres dans l’alphabet. Ces algorithmes ont vite atteint leurs limites avec l’avènement de l’informatique.
Actuellement, les techniques de cryptographie se basent sur des clés, qui sont des paramètres permettant de “personnaliser” le résultat de l’algorithme utilisé. Les parties prenantes doivent posséder chacun une clé (la même, ou deux clés complémentaires) pour pouvoir communiquer. Par exemple, l’algorithme du chiffre de César (chiffrement par décalage) peut être paramétré par la distance utilisée pour le décalage. L’émetteur et l’expéditeur du message doivent se mettre d’accord sur ce décalage pour pouvoir communiquer.
Actuellement, les systèmes de cryptographie se basent sur la complexité de la ou les clés (sécurité calculatoire) pour garantir la confidentialité plus que sur les algorithmes dont les détails sont connus publiquement. Avec l’évolution des technologies et des puissances de calcul, les niveaux de complexité des clés doivent constamment être revus à la hausse.
4.2.3.1. Cryptographie symétrique
En cryptographie symétrique [7] , une seule clé, appelée clé secrète, est utilisée pour le chiffrement et le déchiffrement. Par conséquent, les deux parties prenantes doivent la connaître pour pouvoir communiquer.
Deux types d’algorithmes sont utilisés : - les algorithmes par bloc , où les données sont chiffrées par groupe de n bits, produisant n bits en sortie. Une fonction F est appliquée plusieurs fois sur le bloc de données, avec chaque fois une clé différente, déduite de la clé principale.
- les algorithmes par flot, qui chiffrent bit par bit. L’algorithme engendre une suite de bits qui est ajoutée (XOR) à la suite binaire à chiffrer
Les algorithmes de cryptographie symétrique les plus connus sont DES (actuellement obsolète car il ne permet pas des clés de tailles suffisantes) et AES, tous deux basés sur le chiffrement par bloc.
La cryptographie symétrique est intéressante grâce à son efficacité (vitesse de chiffrement/déchiffrement). Son inconvénient réside dans la mise en oeuvre du partage de cette clé secrète, qui doit rester absolument confidentielle. Il faut donc s’assurer de pouvoir transférer la clé à l’autre partie prenante de la communication par un canal sécurisé par une autre technique (remise en main propre ou utilisation d’un autre chiffrement). Cette transmission de clé s’avère très compliquée lorsqu’elle concerne des utilisateurs multiples.
4.2.3.2. Cryptographie asymétrique
La cryptographie asymétrique, ou cryptographie à clé publique [9], apparue plus tard dans l’histoire de la cryptographie, permet de résoudre le problème du partage de la clé secrète de la cryptographie symétrique. En effet, au lieu de fonctionner avec une clé unique, elle fonctionne avec une paire de clés générées au départ d’un grand nombre non-prévisible et souvent aléatoire.
Une des deux clés, appelée clé publique, est partagée publiquement, tandis que l’autre clé, appelée clé privée, est conservée de manière sécurisée par l’utilisateur. Un message chiffré avec la clé publique ne peut être déchiffré qu’avec la clé privée, et inversement : un message chiffré avec la clé privée ne peut être déchiffré qu’avec la clé publique.
La cryptographie asymétrique est utilisée notamment pour deux applications importantes : Le chiffrement (confidentialité) et la signature numérique (authentification).
Chiffrement
L’objectif du chiffrement est de garantir la confidentialité des données, notamment durant un transfert d’information. Cela implique que seul le destinataire doit pouvoir déchiffrer les données envoyées, grâce à une clé qu’il possède. La cryptographie asymétrique nous permet de réaliser cela en se basant sur le principe que la clé privée est uniquement connue de son détenteur. Si l’on chiffre des données à l’aide de la clé publique, seul le possesseur de la clé privée sera en mesure de les déchiffrer, ce qui est justement l’objectif souhaité.
Ce système évite la difficulté du partage de clé de la cryptographie symétrique : il suffit au destinataire de diffuser publiquement sa clé publique pour permettre à n’importe qui de lui transférer des données de manière sécurisée.
Si la communication doit être bi-directionnelle, les deux parties prenantes doivent posséder leur propre paire de clés. Chacun utilise alors la clé publique de l’autre pour le chiffrement, et sa propre clé privée pour le déchiffrement.
Signature
Une autre application de la cryptographie asymétrique est la signature numérique. L’idée est de pouvoir prouver qu’un message reçu provient bien de la source annoncée, et qu’il n’a pas été modifié lors du transfert. Pour cela, la personne à la source du message va générer une signature qu’il est seul à pouvoir produire, et le receveur vérifiera cette signature à la réception.
La cryptographie asymétrique permet de réaliser cela : la signature sera générée au départ de la clé privée, ce qui permet de garantir que seul l’émetteur, qui possède cette clé, peut produire la signature en question. Le receveur utilisera la clé publique pour vérifier la signature.
Pour générer cette signature, on peut utiliser un algorithme de hachage pour générer une empreinte (“hash”). Cette empreinte est ensuite signée avec la clé privée du signataire, et le résultat est joint au message original.
Ensuite, pour vérifier la signature, le destinataire déchiffre la signature avec la clé publique de l’émetteur, pour retrouver l’empreinte du message original. Il applique ensuite la même fonction de hachage au message originale, et compare l’empreinte obtenue avec l’empreinte reçue via la signature. Si elles sont identique, le receveur a la garantie que le message provient bien de l’émetteur et qu’il n’a pas été modifié durant la transmission.
En plus de garantir l’authenticité du message et son intégrité, ce mécanisme permet également de garantir la non-répudiation : l’émetteur ne peut pas nier ultérieurement avoir signé le message.
Algorithmes d’échange de clés
Comme la cryptographie asymétrique est généralement beaucoup plus couteuse en calculs que la cryptographie symétrique, les deux sont souvent utilisés de manière conjointe. En effet, la cryptographie asymétrique permet l’échange sécurisé de données sans partage de secret préalable, ce qui est justement une limitation de la cryptographie symétrique.
Combiner les deux est donc intéressant : on va utiliser la cryptographie asymétrique pour effectuer l’échange de la clé secrète qui sera utilisée pour le chiffrement des données. Ce principe est utilisé dans les protocoles PGP, SSH et TLS.
Un exemple d’une telle méthode est l’algorithme d’échange de clé de Diffie-Hellman. Cet algorithme permet de générer une clé secrète partagée sans concertation préalable, chaque intervenant la générant en utilisant une combinaison entre sa clé privée et la clé publique de l’autre intervenant.
Systèmes de cryptographie asymétrique
Plusieurs systèmes permettant la mise en oeuvre de la cryptographie asymétrique existent. En voici quelques-uns :
- RSA : cet algorithme très largement utilisé permet le chiffrement, l’échange de clés et la signature
- Diffie-Hellman, présenté plus haut, ne sert que pour l’échange de clés
- DSA (Digital Signature Algorithm), est utilisé exclusivement pour les signatures.
- Les techniques à base de courbes elliptiques (EC), qui permettent entre autres d’améliorer les primitives cryptographiques existantes en réduisant la taille des clés nécessaires.
- ECDH : variante de Diffie-Hellman pour l’échange de clés
- ECDSA (et d’autres) pour la signature numérique
- ECIES pour le chiffrement asymétrique
- …
Authentification de la clé publique
Un des challenges de la cryptographie asymétrique réside dans l’authentification des clés publiques : comment s’assurer qu’une clé publiée publiquement appartient effectivement à une personne donnée?
Effectivement, tous les algorithmes présentés ci-dessus se basent sur le principe que la clé publique est bien celle de la personne visée. Néanmoins, un attaquant pourrait simplement se faire passer pour la personne en question et proposer sa propre clé publique. Tous les intervenants interagiront alors avec l’attaquant sans se douter de l’usurpation d’identité.
Pour éviter ça, il faut donc authentifier les clés publiques. C’est là qu’intervient le concept d’infrastructure à clés publiques (Public Key Infrastructure ou PKI)[9]. Il existe plusieurs modèles d’infrastructures à clés publiques, dont notamment celui basé sur des autorités de certification. D’autres modèles utilisent le principe du “Web of Trust”, ou encore la blockchain pour obtenir cette authentification.
Une infrastructure à clé publique se base souvent sur une hiérarchie, centrée sur un élément considéré comme “de confiance” : Cette racine (appelée “ancre de confiance”) valide ses élément “enfants” en signant leurs clés publiques avec sa propre clé privée. Ces éléments “enfants” valident à leur tour les clés publiques de leurs propres enfants, et ainsi de suite. La validité de la clé publique de la racine étant à la base acceptée par les utilisateurs, elle permet alors de vérifier, en cascade, la chaîne de signatures depuis cette racine jusqu’à la clé publique à valider.
Un tel système de validation hiérarchique des clés publiques est notamment utilisé pour la génération de certificats, qui sont des clés publiques signées par des autorités de certification. Ces certificats sont utilisés par TLS (et donc HTTPS).
Les fonctions à remplir par une infrastructure à clés publiques sont :
- stocker, produire et signer des certificats digitaux
- vérifier l’identité des entités qui demandent la génération d’un certificat pour leur clé publique
- révoquer des certificats lors qu’ils ne sont plus valides
Bibliographie
[1] O.Bonaventure, Computer Networking : Principles, Protocols and Practice, chap. Network Security, consulté en février 2024
[2] Wikipedia, Confidentialité, 26 janvier 2024, consulté en février 2024
[3] Alex Drozhzhin, Identification, authentification et autorisation : quelles sont les différences, Kaspersky Daily, 22 septembre 2020, consulté en février 2024
[4] Wikipedia, Authentification, 31 janvier 2024, consulté en février 2024
[5] CNIL, Les conseils de la CNIL pour un bon mot de passe, 27 janvier 2017, consulté en février 2024
[6] Wikipedia, Password Strength, 14 février 2024, consulté en février 2024
[7] Wikipedia, Cryptographie Symétrique, 8 novembre 2023, consulté en février 2024
[8] Wikipedia, Public-key cryptography, 9 février 2024, consulté en février 2024
[9] Wikipedia, Public key Infrastructure, 31 janvier 2024, consulté en février 2024